package br.database;


import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DbHelperBotao {
	
	//private static final String TABLE_BOTAO = "tablebotao";
	private static final String TABELA_BOTAO = "Botoes";
	private static final String COL_ID = "col_id";
	private static final String ID_LINK_CATEGORIA = "cat_id";
	private static final String NOME = "nome";
	private static final String NOME_ARQUIVO = "arquivo";
	private static final String ID_CATEGORIA_FK = "fk";
	
	private final Context mCtx;
	private DatabaseHelper mDbHelper;
	private SQLiteDatabase mDb;
	private static final int DATABASE_VERSION = 1;
	
	private static final String DATABASE_NAME = "Botoes.db";
	
	private static final String CREATE_BOTAO_TABLE = "create table "
			+ TABELA_BOTAO + " (" + COL_ID + " integer primary key autoincrement, " + NOME + " text not null unique, " + NOME_ARQUIVO
			+ " text not null unique, " + ID_LINK_CATEGORIA + " text, " + ID_CATEGORIA_FK + " integer not null );";

	private static class DatabaseHelper extends SQLiteOpenHelper {
		DatabaseHelper(Context context) {
			super(context, DATABASE_NAME, null, DATABASE_VERSION);
		}

		public void onCreate(SQLiteDatabase db) {
			db.execSQL(CREATE_BOTAO_TABLE);
			Log.i("xxx", "criou tabela:");
		}

		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			db.execSQL("DROP TABLE IF EXISTS " + TABELA_BOTAO);
			onCreate(db);
		}
	}
	
	public void Reset() {
		mDbHelper.onUpgrade(this.mDb, 1, 1);
	}

	public DbHelperBotao(Context ctx) {
		mCtx = ctx;
		mDbHelper = new DatabaseHelper(mCtx);
	}

	public DbHelperBotao open() throws SQLException {
		mDb = mDbHelper.getWritableDatabase();
		return this;
	}

	public void close() {
		mDbHelper.close();
	}
	
	public void insertEmpDetails(Botao b) {
		ContentValues cv = new ContentValues();
		
		cv.put(ID_CATEGORIA_FK, b.getAge());
		cv.put(ID_LINK_CATEGORIA, b.getId_link_categoria());
		cv.put(NOME_ARQUIVO, b.getName_arquivo());
		cv.put(NOME, b.getName());
		mDb.insert(TABELA_BOTAO, null, cv);
	}

	public Botao retriveEmpDetails() throws SQLException {
		Cursor cur = mDb.query(true, TABELA_BOTAO, new String[] { COL_ID,NOME,NOME_ARQUIVO,ID_LINK_CATEGORIA,ID_CATEGORIA_FK}, null, null, null, null, null, null);
		if (cur.moveToFirst()) {
			String name = cur.getString(cur.getColumnIndex(NOME));
			String name_arq = cur.getString(cur.getColumnIndex(NOME_ARQUIVO));
			String id_link = cur.getString(cur.getColumnIndex(ID_LINK_CATEGORIA));
			int age = cur.getInt(cur.getColumnIndex(ID_CATEGORIA_FK));
			int indexModelo = cur.getInt(cur.getColumnIndex(COL_ID));
          //  int id = cur.getInt(indexModelo);
			cur.close();
			return new Botao(indexModelo,name,name_arq,id_link, age);
		}
		cur.close();
		return null;
	}
	
	public List<Botao> recuperarTodos() throws SQLException{
	//	Log.i("xxx", "referencia do ID 1: ");
        String queryReturnAll = "SELECT * FROM " + TABELA_BOTAO;
        Cursor cursor = mDb.rawQuery(queryReturnAll, null);
        List<Botao> bts = construirVeiculoPorCursor(cursor);
    //    Log.i("xxx", "referencia do ID 1.2: ");
        return bts;
    }
	
	
	
	private List<Botao> construirVeiculoPorCursor(Cursor cursor) throws SQLException{
        List<Botao> bs = new ArrayList<Botao>();
    //    Log.i("xxx", "referencia do ID 2: ");
        if(cursor == null){
        	
            return bs;
        }
        try {
 
            if (cursor.moveToFirst()) {
            	
                do {
                //	 Log.i("xxx", "Pegando quemmlml.mlmlkmlkm:");
                    int indexnome = cursor.getColumnIndex(NOME);
                	int indexnome_arq = cursor.getColumnIndex(NOME_ARQUIVO);
                	int indexlink = cursor.getColumnIndex(ID_LINK_CATEGORIA);
                    int indexfk = cursor.getColumnIndex(ID_CATEGORIA_FK);
                    int indexModelo = cursor.getColumnIndex(COL_ID);
                    int id = cursor.getInt(indexModelo);
                    String name = cursor.getString(indexnome);
                    String name_a = cursor.getString(indexnome_arq);
                    String link = cursor.getString(indexlink);
                    int idFk = cursor.getInt(indexfk);
 
                    Botao cat = new Botao(id,name,name_a,link, idFk);
 
                    bs.add(cat);
 
                } while (cursor.moveToNext());
            }
             
        } finally {
            cursor.close();
        }
        return bs;
    }
	
	public void excluir(int id){
	    mDb = mDbHelper.getWritableDatabase();
	    int rows = mDb.delete("Botoes", "col_id = ?", new String[]{ String.valueOf(id) });
	  //  return rows; // qtde. de linhas afetadas
	}
	

	public void excluirByName(String id){
	    mDb = mDbHelper.getWritableDatabase();
	    int rows = mDb.delete("Botoes", "nome = ?", new String[]{ String.valueOf(id) });
	  //  return rows; // qtde. de linhas afetadas
	}
	
	public Botao recuperarPorID(int id) {
		Log.i("xxx","chegou agora   " + id);

        String queryOne = "SELECT * FROM Botoes"  + " where " + COL_ID + " = " + id;
        List<Botao> result = recuperarPorQuery(queryOne);
        if(result.isEmpty()) {
            
            return new Botao();
        } else {
            return result.get(0);  
        }
    }
	
	public List<Botao> recuperarPorListaPorId(int id) {
        String queryOne = "SELECT * FROM " + TABELA_BOTAO + " where " + ID_CATEGORIA_FK + " = " + id;
     //   Log.i("xxx","categoria_ID + id: " + ID_CATEGORIA_FK + "   ..   " + id);
        List<Botao> result = recuperarPorQuery(queryOne);
        if(result.isEmpty()) {
            return new LinkedList<Botao>();
        } else {
            return result;  
        }
    }
	
	public List<Botao> recuperarListaNome(String nome) {
        String queryOne = "SELECT * FROM " + TABELA_BOTAO + " where " + ID_LINK_CATEGORIA + " = '" + nome + "'";
        List<Botao> result = recuperarPorQuery(queryOne);
        if(result.isEmpty()) {
        	return new LinkedList<Botao>();
        } else {
            return result;  
        }
    }
	
	public List<Botao> recuperarPorQuery(String query) {
		 
        Cursor cursor = mDb.rawQuery(query, null);
 
        List<Botao> result = new ArrayList<Botao>();
        if (cursor.moveToFirst()) {
            do {
                ContentValues contentValues = new ContentValues();
                DatabaseUtils.cursorRowToContentValues(cursor, contentValues);
                Botao t = contentValuesParaEntidade(contentValues);
                result.add(t);
            } while (cursor.moveToNext());
        }
        return result;
    }
	
	public Botao contentValuesParaEntidade(ContentValues contentValues) {
        Botao b = new Botao();
        b.setId(contentValues.getAsInteger(COL_ID));
        b.setName(contentValues.getAsString(NOME));
        b.setName_arquivo(contentValues.getAsString(NOME_ARQUIVO));
        b.setId_link_categoria(contentValues.getAsString(ID_LINK_CATEGORIA));
        return b;
    }
	
	public Botao recuperarPorNome(String nome) {
        String queryOne = "SELECT * FROM " + TABELA_BOTAO + " where nome = '" + nome + "'";
        
        List<Botao> result = recuperarPorQuery(queryOne);
        if(result.isEmpty()) {
            return new Botao();
        } else {
            return result.get(0);  
        }
    }
	
	public Integer getEmpId() {
		String queryOne = "SELECT * FROM " + TABELA_BOTAO ;
        List<Botao> result = recuperarPorQuery(queryOne);
        if(result.isEmpty()) {
            return -1;
        } else {
            return result.get(0).getId();  
        }
	}
	
	public void update(Botao b) {
		ContentValues cv = new ContentValues();
		cv.put(ID_CATEGORIA_FK, b.getAge());
		cv.put(ID_LINK_CATEGORIA, b.getId_link_categoria());
		cv.put(NOME_ARQUIVO, b.getName_arquivo());
		cv.put(NOME, b.getName());
		// update
	//	Log.i("ojlkl", "CarDAO > UPDATE" + b.getId());
		mDb.update("Botoes", cv,"col_id=" + b.getId(), null);
		// ou
	//	mDbHelper.getDataBase().update("Botoes ", cv, " col_id = ? ",new String[]{ String.valueOf(b.getId()) });
	//	Log.i("ojlkl", TABELA_BOTAO + b.getId());
	}
	
	public void update2(Botao b) {
		ContentValues cv = new ContentValues();
		cv.put(ID_LINK_CATEGORIA, b.getId_link_categoria());
		
	///	Log.i("ojlkl", "CarDAO > UPDATE" + b.getId());
		mDb.update("Botoes", cv,"col_id=" + b.getId(), null);
	}
}
